Traditional computing environments featuring single processors generally perform data processing operations associated with a particular computer-implemented process in a serial manner, although some traditional computing environments may support time-division multiplexing, where a single processor switches between different operations frequently enough that a user perceives that the operations are being performed concurrently.
Computing environments have been trending to multiprocessing systems having multiple processing units. Many types of systems may be considered to be multiprocessing systems, and examples of multiprocessing systems include but are not limited to: systems having multiple central processing units (“CPUs”) and/or graphics processing units (“GPUs”); single- or multi-CPU/GPU systems having multiple cores; and single- or multi-CPC/GPU systems that have additional hardware supports to efficiently execute multiple operations
Computer programs that implement all or part of a particular computer-implemented process may also be designed to be multithreaded, that is, to have multiple threads of execution. A thread of execution is a portion of a computer program that can be performed concurrently with another portion of the computer program.
The trend toward multiprocessing systems and the emergence of multithreaded computer programs, and especially the combination thereof, has the potential to increase performance and efficiency of many computer-implemented processes. To achieve such performance and efficiency gains, it is desirable to specially design multithreaded computer programs.